package com.stlm2.util.connection;



import java.util.ArrayList;
import java.util.List;

/**
 * Created by sfy on 2017/6/21.
 */
public class ListUtil<E> {
      /*
      * sfy
      * 采用泛型兼容各种对象
      * 功能描述:将一个list切分成一个包含N个小List的大List，主要是为了配合多线程使用
      * param: 原list（传递进来的list）  num(num个为一个新的小list)  多少个list为一组list
      * */
     public  List<List<E>>  oneManyOneList(List<E> list, int num){
         List<List<E>> list0 = new ArrayList<List<E>>();

          int threadNum = 1;   //一共要启动的线程数，也是一共可以拆分成多少个小list
          int zhengChu  = list.size()/num;
          int yuShu = list.size()%num;
          if(yuShu!=0){//说明没有整除
             threadNum = zhengChu+1;
          }else{
              threadNum = zhengChu;
          }

         //根据线程数，制造相应数目的小list

         if(yuShu>0){//将最后剩下的几个对象，也放在list中
             for(int k = 0;k<threadNum-1;k++){
                 List<E> list1 = new ArrayList<E>();
                 int fromIndex = k*num;
                 int endIndex = (k+1)*num;

                 list1   =    list.subList(fromIndex,endIndex);
                 list0.add(list1);
             }
             List<E> list2 = new ArrayList<E>();
        list2 = list.subList((threadNum-1)*num,list.size());
           list0.add(list2);
         }else {
             for(int k = 0;k<threadNum;k++){
                 List<E> list1 = new ArrayList<E>();
                 int fromIndex = k*num;
                 int endIndex = (k+1)*num;

                 list1   =    list.subList(fromIndex,endIndex);
                 list0.add(list1);
             }
         }

         return  list0;
     }


}
